﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace Mojservetr
{
    class Program
    {
        static void Main(string[] args)
        {
            /*  Primjer zahtjeva koji browser(chrome, ...) salje web serveru kada ukucamo http://prva.etf.ba:88/index.html?teo
             *  
             *  GET /index.html?teo HTTP/1.1
                Host: prva.etf.ba
                Connection: keep-alive
                User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.50 Safari/534.24
                Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*;q=0.5
                Accept-Encoding: gzip,deflate,sdch
                Accept-Language: en-US,en;q=0.8,hr;q=0.6,de-DE;q=0.4
                Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
             */

            String wwwRoot = "C:\\www\\";                   // Folder u kojem se nalaze fajlovi koje ce web server servirati
            TcpListener server = new TcpListener(88);       // Otvaramo port 88 za slusanje (podizemo TCP server na portu 88)
            server.Start();                                 //

            TcpClient handler = server.AcceptTcpClient();   // Cekamo dok se na server ne nakaci klijent (npr. web browser)
            NetworkStream nc = handler.GetStream();         // Uzimamo  I/O streamove prema tom klijentu

            byte[] data = new byte[handler.ReceiveBufferSize];
            int rdl = nc.Read(data, 0, data.Length);        // citamo sta nam je klijent poslao
            String s = Encoding.ASCII.GetString(data);      // pretvaramo iz byte[] u string
            //Console.WriteLine(s);
            //Console.Read();

            s = (s.Split('\n')[0]).Split(' ')[1].Substring(1);      // Izdvajamo  index.html?teo iz prve linije (GET /index.html?teo HTTP...)
            
            //index.html?teo mozemo programu proslijediti vatijable i isprogramirati kod u C# kako da
            // generise web stranicu
            String a = File.ReadAllText(wwwRoot + s.Split('?')[0]);         // Cita file koji smo zatrazili i kopira njegov sadrzaj u varijablu a
            a +=  (s.Split('?')[1] == "teo")? "Eterovic" :"Nosovic";        
            a += " " + s.Split('?')[1];                                     // teo

            byte[] b = Encoding.ASCII.GetBytes(a);          // string to byte

            nc.Write(b,0,b.Length);                         // ispisuje klijentu web stranicu tj browseru
            

            /* 
             * Podrska za vhostove bi izgledala:  (ubaciti u liniju koda 38 za testiranje)
             * String wwwRoot1 = "c:\\www\\vhost1";
             * String wwwRoot2 = "c:\\www\\vhost2";
             * String wwwRoot="";
             * if (s.Split('\n')[1].Contains("vhost1")) wwwRoot = wwwRoot1; else wwwRoot = wwwRoot2;
             * tj. ako u drugoj liniji requesta nadjemo vhost1 string (Host: prva.etf.ba) koristi jedan wwwRoot za stranice inace drugi
             */ 
              
            nc.Close();
            handler.Close();
            server.Stop();
        }
    }
}
